// https://nuxt.com/docs/api/configuration/nuxt-config
import { resolve } from "node:path";
import path from "path";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";

// import { fileURLToPath } from 'url';
import { FileSystemIconLoader } from "unplugin-icons/loaders";
import IconsResolver from "unplugin-icons/resolver";
import Components from "unplugin-vue-components/vite";
// import { vitePluginForArco } from "@arco-plugins/vite-vue";
const define = {} as any;
// 处理process.env以便在客户端能够取到
Object.keys(process.env).forEach(name => {
	if (!name.startsWith("NUXT_")) return;
	define["process.env." + name] = JSON.stringify(process.env[name]);
});
export default defineNuxtConfig({
	srcDir: "src", //定义nuxt项目根目录
	devtools: { enabled: true },
	devServer: {
		port: 3000,
		host: "0.0.0.0"
		// url: "http://localhost:3000" //监听url
		// https: {
		// 	key: "./server.key",
		// 	cert: "./server.crt"
		// }
	},
	vue: {
		// defineModel: true,
		propsDestructure: true
	},
	//配置别名
	alias: {},
	app: {
		// 根元素Id
		rootId: "domain-services",
		head: {
			title: "Domain Services",
			link: [{ rel: "icon", href: "/favicon.svg", type: "image/svg+xml" }],
			meta: [
				{
					name: "viewport",
					content: "width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,viewport-fit=cover"
				}
			],
			script: [
				// {
				// 	src: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/gasp-latest-beta.min.js",
				// 	defer: true
				// },
				// {
				// 	src: "https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/ScrollTrigger.min.js",
				// 	defer: true
				// }
			]
		},
		// 布局过渡效果
		// layoutTransition: { name: 'layout', mode: 'default' },
		// 页面过渡效果
		pageTransition: { name: "page", mode: "out-in" }
	},
	modules: [
		"@nuxtjs/i18n",
		"arco-design-nuxt-module",
		"@unocss/nuxt",
		[
			"unplugin-icons/nuxt",
			{
				autoInstall: true,
				customCollections: {
					icons: FileSystemIconLoader(resolve(__dirname, "./src/assets/icons"))
				}
			}
		],
		"@pinia/nuxt",
		"@pinia-plugin-persistedstate/nuxt",
		"@nuxt/image"
	],
	i18n: {
		locales: ["zh-CN", "en"],
		defaultLocale: "zh-CN",
		detectBrowserLanguage: {
			useCookie: true,
			cookieDomain: process.env.NUXT_MASTER_COOKIE_DOMAIN,
			cookieKey: process.env.NUXT_MASTER_COOKIE_DOMAIN,
			redirectOn: "root",
			fallbackLocale: "zh-CN"
		},
		vueI18n: "./src/lang/index.ts"
	},
	//运行时配置
	runtimeConfig: {
		public: {
			apiBase: process.env.NUXT_PUBLIC_API_BASE ?? "",
			masterDomain: process.env.NUXT_MASTER_DOMAIN ?? "",
			langKey: process.env.NUXT_LANG_KEY ?? "",
			tokenKey: process.env.NUXT_TOKEN_KEY ?? "",
			cookieDomain: process.env.NUXT_MASTER_COOKIE_DOMAIN ?? "",
			storePrefix: process.env.NUXT_STORE_PREFIX ?? ""
		}
	},
	router: {
		options: {
			linkActiveClass: "is-active",
			linkExactActiveClass: "is-exact-active"
		}
	},
	imports: {
		// Directories to scan for auto imports.
		// 配置自动导入的目录
		dirs: [
			resolve(__dirname, "./src/constants"),
			resolve(__dirname, "./src/apis"),
			resolve(__dirname, "./src/utils"),
			resolve(__dirname, "./src/composables")
		]
	},
	arco: {
		importPrefix: "A",
		hookPrefix: "Arco",
		locales: ["getLocale"],
		localePrefix: "Arco"
		// importStyle: false // 是否自动引入样式
	},
	postcss: {
		plugins: {
			// 这个工具可以实现自动添加CSS3前缀
			autoprefixer: {
				overrideBrowserslist: [
					"Android 4.1",
					"iOS 7.1",
					"Chrome > 31",
					"ff > 31",
					"ie >= 8",
					"last 10 versions" // 所有主流浏览器最近10版本用
				],
				grid: true
			},
			"postcss-pxtorem": {
				rootValue: 16, // 指定转换倍率，我现在设置这个表示1rem=37.5px;
				propList: ["*"], // 属性列表，表示你要把哪些css属性的px转换成rem，这个*表示所有
				mediaQuery: false, // 是否允许使用媒体查询，false媒体查询的代码可用，true不可用
				exclude: "ignore",
				replace: true, // 替换包含rem的规则，而不是添加回退
				minPixelValue: 1, // 需要转换的最小值，一般1px像素不转换，以上才转换
				unitPrecision: 6, // 转换成rem单位的小数点后的保留位数
				selectorBalckList: ["van"] // 匹配不被转换为rem的选择器
			}
			// 'postcss-px-to-viewport': {
			//   unitToConvert: 'px', // 要转化的单位
			//   viewportWidth: 1920, // UI设计稿的宽度
			//   unitPrecision: 6, // 转换后的精度，即小数点位数
			//   propList: ['*'], // 指定转换的css属性的单位，*代表全部css属性的单位都进行转换
			//   viewportUnit: 'vw', // 指定需要转换成的视窗单位，默认vw
			//   fontViewportUnit: 'vw', // 指定字体需要转换成的视窗单位，默认vw
			//   selectorBlackList: [], // 指定不转换为视窗单位的类名,例如van-（vantUI组件），
			//   minPixelValue: 1, // 默认值1，小于或等于1px则不进行转换
			//   mediaQuery: true, // 是否在媒体查询的css代码中也进行转换，默认false
			//   replace: true, // 是否转换后直接更换属性值
			//   exclude: [/node_modules/], // 设置忽略文件，用正则做目录名匹配，最好不要排除node_modules 文件，排除后在项目中会发现字体不能跟随页面放大
			//   landscape: false // 是否处理横屏情况
			// }
		}
	},
	nitro: {
		// 打包配置
		output: {
			dir: resolve(__dirname, "dist"),
			publicDir: resolve(__dirname, "dist")
		},
		compressPublicAssets: {
			gzip: true,
			brotli: true
		}
	},
	css: [
		"@/assets/styles/index.less",
		"@/assets/styles/arco/index.less",
		// "@arco-design/web-vue/dist/arco.less", //arco-design的默认样式
		"@arco-themes/vue-domaindns/index.less"
	],
	components: [
		{
			path: "~/components",
			//不使用目录前缀
			pathPrefix: false
		},
		{
			path: "~/application",
			//不使用目录前缀
			pathPrefix: false
		},
		{
			path: "~/business",
			//不使用目录前缀
			pathPrefix: false
		}
	],
	vite: {
		define: {
			...define
		},
		// css: {
		// 	preprocessorOptions: {
		// 		scss: {
		// 			// 全局引入scss常量，供全局使用
		// 			additionalData: '@import "@arco-themes/vue-domaindns/index.less";'
		// 		}
		// 	}
		// },
		build: {
			terserOptions: {
				compress: {
					//生产环境时移除console
					drop_console: true,
					drop_debugger: true
				}
			},
			//   关闭文件计算
			reportCompressedSize: false,
			//   关闭生成map文件 可以达到缩小打包体积 这个生产环境一定要关闭，不然打包的产物会很大
			sourcemap: false,
			// rollup 配置
			rollupOptions: {
				output: {
					manualChunks(id) {
						if (id.includes("node_modules")) {
							return id.toString().split("node_modules/")[1].split("/")[0].toString();
						}
					}
				}
			}
		},
		plugins: [
			Components({
				dirs: ["./src/components"],
				resolvers: [
					IconsResolver({
						customCollections: ["icons"]
					})
				]
			}),
			// 引入svg图标组件
			createSvgIconsPlugin({
				iconDirs: [path.resolve(process.cwd(), "./src/assets/svgIcons")] // 这个是我自己的路径
			})
			// vitePluginForArco({
			// 	theme: "@arco-themes/vue-domaindns"
			// })
		]
	}
});
